]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
slider: Use Clutter.Sprite for pointing focus accounting
authorCarlos Garnacho <carlosg@gnome.org>
Mon, 26 May 2025 15:24:29 +0000 (17:24 +0200)
committerMarge Bot <marge-bot@gnome.org>
Thu, 28 Aug 2025 20:15:40 +0000 (20:15 +0000)
Move away from devices and sequences for this identification.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3726>

js/ui/slider.js

index 29c17500e9469bba3e6121203ca872eb0d3c3b2c..3b0a3b7cf3dd68aa83a233ab89f744633005dd43 100644 (file)
@@ -85,13 +85,11 @@ export const Slider = GObject.registerClass({
 
         this._dragging = true;
 
-        let device = event.get_device();
-        let sequence = event.get_event_sequence();
-
         this._grab = global.stage.grab(this);
 
-        this._grabbedDevice = device;
-        this._grabbedSequence = sequence;
+        const backend = global.stage.get_context().get_backend();
+        const sprite = backend.get_sprite(global.stage, event);
+        this._sprite = sprite;
 
         // We need to emit 'drag-begin' before moving the handle to make
         // sure that no 'notify::value' signal is emitted before this one.
@@ -115,8 +113,6 @@ export const Slider = GObject.registerClass({
                 this._grab = null;
             }
 
-            this._grabbedSequence = null;
-            this._grabbedDevice = null;
             this._dragging = false;
 
             this.emit('drag-end');
@@ -124,22 +120,25 @@ export const Slider = GObject.registerClass({
         return Clutter.EVENT_STOP;
     }
 
-    vfunc_button_release_event() {
-        if (this._dragging && !this._grabbedSequence)
+    vfunc_button_release_event(event) {
+        const backend = global.stage.get_context().get_backend();
+        const sprite = backend.get_sprite(global.stage, event);
+
+        if (this._dragging && this._sprite === sprite)
             return this._endDragging();
 
         return Clutter.EVENT_PROPAGATE;
     }
 
     vfunc_touch_event(event) {
-        let sequence = event.get_event_sequence();
+        const backend = global.stage.get_context().get_backend();
+        const sprite = backend.get_pointer_sprite(global.stage);
 
         if (!this._dragging &&
             event.type() === Clutter.EventType.TOUCH_BEGIN) {
             this.startDragging(event);
             return Clutter.EVENT_STOP;
-        } else if (this._grabbedSequence &&
-                   sequence.get_slot() === this._grabbedSequence.get_slot()) {
+        } else if (this._sprite === sprite) {
             if (event.type() === Clutter.EventType.TOUCH_UPDATE)
                 return this._motionEvent(this, event);
             else if (event.type() === Clutter.EventType.TOUCH_END)
@@ -178,7 +177,10 @@ export const Slider = GObject.registerClass({
     }
 
     vfunc_motion_event(event) {
-        if (this._dragging && !this._grabbedSequence)
+        const backend = global.stage.get_context().get_backend();
+        const sprite = backend.get_sprite(global.stage, event);
+
+        if (this._dragging && this._sprite === sprite)
             return this._motionEvent(this, event);
 
         return Clutter.EVENT_PROPAGATE;